This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Summary: | Cannot easily change JNDI resource name | ||
---|---|---|---|
Product: | obsolete | Reporter: | korb <korb> |
Component: | visualweb | Assignee: | _ jimdavidson <jimdavidson> |
Status: | RESOLVED FIXED | ||
Severity: | blocker | ||
Priority: | P2 | ||
Version: | 5.x | ||
Hardware: | All | ||
OS: | All | ||
URL: | http://wiki.netbeans.org/wiki/view/DatasourceNaming | ||
Issue Type: | ENHANCEMENT | Exception Reporter: | |
Bug Depends on: | 113051 | ||
Bug Blocks: | 90450 |
Description
korb
2006-11-07 22:17:51 UTC
A change for the first release would require new architecuture and UI changes and too late for this release of VWP. To be resolved in the subsequent release. Please let me know if the workaround provided solves this issue in the meantime No, this work-around did not fix this. After making the specified changes and restarting NB+VWP, the visual designer displayed a "Component Error" message instead of the visual editor, and the following stack trace was shown: java.lang.RuntimeException: java.sql.SQLException: JdbcRowSetXImpl (connect): (JNDI) Unable to connect: java:comp/env/jdbc/cpsDataSource at com.sun.data.provider.impl.CachedRowSetDataProvider.getMetaData(CachedRowSetDataProvider.java:1320) at com.sun.data.provider.impl.CachedRowSetDataProvider.getFieldKeys(CachedRowSetDataProvider.java:489) at com.sun.data.provider.impl.CachedRowSetDataProvider.getFieldKeyInternal(CachedRowSetDataProvider.java:467) at com.sun.data.provider.impl.CachedRowSetDataProvider.getFieldKey(CachedRowSetDataProvider.java:439) at com.sun.rave.web.ui.faces.DataProviderPropertyResolver$SelectItemsData.getValue(DataProviderPropertyResolver.java:511) at com.sun.rave.web.ui.faces.DataProviderPropertyResolver$SelectItemsData.getSelectItems(DataProviderPropertyResolver.java:636) at com.sun.rave.web.ui.faces.DataProviderPropertyResolver.getValue(DataProviderPropertyResolver.java:146) at com.sun.faces.el.PropertyResolverChainWrapper.getValue(PropertyResolverChainWrapper.java:75) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143) at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:62) at com.sun.el.parser.AstValue.getValue(AstValue.java:117) at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192) at com.sun.faces.application.ValueBindingValueExpressionAdapter.getValue(ValueBindingValueExpressionAdapter.java:102) at com.sun.rave.web.ui.dt.renderer.SelectorDesignTimeRenderer.encodeBegin(SelectorDesignTimeRenderer.java:105) at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:810) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:463) at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:253) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:828) at com.sun.rave.web.ui.util.RenderingUtilities.renderComponent(RenderingUtilities.java:80) at com.sun.rave.web.ui.renderer.AbstractRenderer.encodeChildren(AbstractRenderer.java:194) at com.sun.rave.web.ui.dt.renderer.AbstractDesignTimeRenderer.encodeChildren(AbstractDesignTimeRenderer.java:44) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:828) at com.sun.rave.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1263) at com.sun.rave.insync.faces.FacesPageUnit.renderNode(FacesPageUnit.java:1482) at com.sun.rave.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1296) at com.sun.rave.insync.faces.FacesPageUnit.renderNode(FacesPageUnit.java:1482) at com.sun.rave.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1296) at com.sun.rave.insync.faces.FacesPageUnit.renderNode(FacesPageUnit.java:1482) at com.sun.rave.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1296) at com.sun.rave.insync.faces.FacesPageUnit.renderNode(FacesPageUnit.java:1482) at com.sun.rave.insync.faces.FacesPageUnit.renderBean(FacesPageUnit.java:1296) at com.sun.rave.insync.faces.FacesPageUnit.getFacesRenderTree(FacesPageUnit.java:1066) at com.sun.rave.insync.faces.FacesPageUnit.renderHtml(FacesPageUnit.java:1604) at com.sun.rave.insync.models.FacesModel.getHtmlDomFragment(FacesModel.java:1502) at com.sun.rave.insync.models.FacesModel.findHtmlBody(FacesModel.java:1526) at com.sun.rave.insync.models.FacesModel.getHtmlBody(FacesModel.java:1514) at com.sun.rave.designer.jsf.JsfForm.getHtmlBody(JsfForm.java:308) at com.sun.rave.designer.WebForm.getHtmlBody(WebForm.java:749) at com.sun.rave.designer.DesignerPaneUI.resetPageBox(DesignerPaneUI.java:582) at com.sun.rave.designer.DesignerPaneUI.installUI(DesignerPaneUI.java:743) at javax.swing.JComponent.setUI(JComponent.java:652) at com.sun.rave.designer.DesignerPane.updateUI(DesignerPane.java:184) at com.sun.rave.designer.DesignerPane.init(DesignerPane.java:156) at com.sun.rave.designer.DesignerPane.<init>(DesignerPane.java:130) at com.sun.rave.designer.DesignerTopComp.createDesignerPane(DesignerTopComp.java:824) at com.sun.rave.designer.DesignerTopComp.componentOpened(DesignerTopComp.java:230) at org.netbeans.core.multiview.MultiViewPeer.showCurrentElement(MultiViewPeer.java:256) at org.netbeans.core.multiview.MultiViewPeer.peerComponentOpened(MultiViewPeer.java:211) at org.netbeans.core.multiview.MultiViewCloneableTopComponent.componentOpened(MultiViewCloneableTopComponent.java:133) at org.openide.windows.WindowManager.componentOpenNotify(WindowManager.java:273) at org.netbeans.core.windows.WindowManagerImpl.notifyTopComponentOpened(WindowManagerImpl.java:902) at org.netbeans.core.windows.Central.addModeOpenedTopComponent(Central.java:590) at org.netbeans.core.windows.ModeImpl.addOpenedTopComponent(ModeImpl.java:255) at org.netbeans.core.windows.PersistenceHandler.initModeFromConfig(PersistenceHandler.java:323) at org.netbeans.core.windows.PersistenceHandler.load(PersistenceHandler.java:158) at org.netbeans.core.windows.WindowSystemImpl.load(WindowSystemImpl.java:45) at org.netbeans.core.NonGui$3.run(NonGui.java:224) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) at java.awt.EventQueue.dispatchEvent(EventQueue.java:461) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThread.java:110) Caused by: java.sql.SQLException: JdbcRowSetXImpl (connect): (JNDI) Unable to connect: java:comp/env/jdbc/cpsDataSource at com.sun.sql.rowset.CachedRowSetXImpl.getConnection(CachedRowSetXImpl.java:4167) at com.sun.sql.rowset.CachedRowSetXImpl.getMetaData(CachedRowSetXImpl.java:2337) at com.sun.data.provider.impl.CachedRowSetDataProvider.getMetaData(CachedRowSetDataProvider.java:1318) ... 63 more After switching back to the original states of each of these changed files, I then changed the sun-web.xml (since I deploy this on a SJAS 8.2 instance) so that the resource-ref still had the res-ref-name as jdbc/dataSource, but I changed the jndi-name to jdbc/cpsDataSource then manually added this new JDBC Resource via the AS admin console. The workaround should work. Could you zip up a project (sans libraries) and attach to the bug or email me directly cfqa-testapps AT sun DOT com Thanks In an attempt to get to the bottom of this, I did the following: - New Project (named bug88871) with J2EE 1.4, source level 1.5, deploying to my SJAS 8.2 instance - Dropped a static text (title) component on Page1 - Dropped a drop-down list component on Page1 - Dragged the REQUESTOR table from my Oracle database in the Runtime->Databases view and dropped it on my drop-down list - Selected the Bind to Data... context menu item on my drop-down and verified that it was bound to the fields I wanted - Ran the project - new dataSource resource was created, app was deployed, and it worked - Went into the Runtime->Servers view and undeployed my app and deleted the dataSource resource and its oracle-thinPool connection pool - Shutdown the IDE - Opened SessionBean1.java in TextPad and changed "dataSource" to "demoDataSource" in the _init() method - Opened jdbc_dataSource.sun-resource in TextPad and changed "dataSource" to "demoDataSource" in the jdbc-resource tag - Opened web.xml in TextPad and changed "dataSource" to "demoDataSource" in the res-ref-name tag - Restarted IDE, and it opened to my new project, Page1 in the visual editor, and displayed the "Component Error" screen with a SQLException ("(JNDI) Unable to connect: java:comp/env/jdbc/demoDataSource") Poked around a bit more, and made some additional changes: - Opened sun-web.xml in TextPad and changed "dataSource" to "demoDataSource" in the res-ref-name and jndi-name tags - Opened oracle-thinPool.sun-resource in TextPad and changed "oracle-thinPool" to "demo-oracle-thinPool" in jdbc-connection-pool tag - Opened jdbc_dataSource.sun-resource in TextPad and changed "oracle-thinPool" to "demo-oracle-thinPool" in jdbc-resource tag Found the following in ~/.netbeans/5.5/context.xml: <object name="dataSource" class="com.sun.rave.sql.DesignTimeDataSource"> <arg class="java.lang.Boolean" value="false"/> <arg class="java.lang.String"/> <arg class="java.lang.Boolean" value="true"/> <arg class="java.lang.String" value="oracle.jdbc.driver.OracleDriver"/> <arg class="java.lang.String" value="jdbc:oracle:thin:@app-ora008:1521:DBT1"/> <arg class="java.lang.String"/> <arg class="java.lang.String" value="mydb"/> <arg class="java.lang.String" value="A45909A45909A45909"/> </object> and in ~/.netbeans/5.5/var/attributes.xml: <fileobject name="C:|src|bug88871|src|java|bug88871|SessionBean1.java"> <attr name="datasource-names" stringvalue="java:comp/env/jdbc/dataSource"/> </fileobject> - I changed both files to specify demoDataSource instead of dataSource, and restarted the IDE - no component error this time! - Ran the project, and the new connection pool (demo-oracle-thinPool) was created as was the new JDBC resource (demoDataSource) So, in addition to changing the files in the project itself as was originally described, you must also update the context.xml and attributes.xml in the NB user directory as these are IDE-wide settings, not specific to a single project. Thanks for the additional information. This will be added to the release notes - can't fix for FCS but will be on the radar for the next release Thank you for contributing to VWP TP This information has been added to the FAQ as well: http://wiki.netbeans.info/wiki/view/VwpFAQJndi So as not to leave any info out, more discussion here: http://www.nabble.com/Data-source-name-references-don%27t-behave-in-VWP-tf2821303.html#a7879020 This is a P2 task so raising the priority to keep in-sync Data source name is more meaningful now. [schema] + [database product name] Planning on a feature so the user can change the name easily Capability to rename a data source name will be postponed until at least M10 As of M8, data source name follows the format [Schema][Database product Name] My SQL connections do not require a schema so, the name format will be [Database][Database product name] *** Issue 94728 has been marked as a duplicate of this issue. *** Apparently, "there is no possibility to invoke Choose Database dialog by some API" So, rename will have to be done throught the property sheet A better option would be to add a "Rename" action on the child data source node and provide similar rename support as files There are two ways to do this. One way has been implemented in M10. When the data source is first created, the user can specify the datasource name (JNDI name) to use instead of the default name that the IDE generates. The IDE prompts for a new name, in a dialog that appears after a DB table is dropped onto the form. The presence of the dialog is controlled by a system option, which is turned off by default since most Visual Web users won't want to specify the name. On that basis, I will mark this specific enhancement as fixed. A better way would be to allow the datasource to be renamed by the user, after it is first created. That is not currently possible, because the underlying J2eeServer APIs do not provide support for either removing or renaming datasources. I will open a separate P1 Enhancement for that additional functionality, to be addressed in a future release. New Enhancement filed as #107082 (VisualWeb)/107081 (J2eeServer). |