Writing content spi
Hi, I've a cms portlet that does CRUD of content in it's own repository (maybe
Oracle DB)
I would like to integrate the the content as well as repository to the BEA portal
for personalization purposes.
Is there anyone who has done it before.
Can anyone provide me some details on how I can do this?
Edmund, unfortunately i don't know of an example spi implementation to point you
to that is public. The article does discuss the interfaces you need to implement,
there are about 5 of them that reside in com.bea.content.spi. content_repo.jar
is the bea ootb implementation of the spi, but the spi interfaces reside in content.jar.
let me know if you run into specific issues/questions with your implementation.
James
"Fred Simone" <[email protected]> wrote:
>
Hi James,
I read through the article you emailed me, the article is still very
brief.
It does not mentioned what are implementation needed to be involved
what are the interface exactly required for implementation.
Is there a more detailed guide on how i can do this.
Btw, I noticed that there a content_repo.jar, is that what I need to
implement?
I would appreciate if there are any sample or detail guide that I can
continue
my
implementation for the BEA Portal 3rd Party CM Personal.
regards,
Edmund Leong
93897453
"James Owen" <[email protected]> wrote:
We recently submitted an article to dev2dev on the content spi, butit
hasn't been
posted yet. If you send me an email ([email protected]) requesting the article,
i'll
pass it along.
regards,
james
"Fred Simone" <[email protected]> wrote:
Hi, I've a cms portlet that does CRUD of content in it's own repository
(maybe
Oracle DB)
I would like to integrate the the content as well as repository to
the
BEA portal
for personalization purposes.
Is there anyone who has done it before.
Can anyone provide me some details on how I can do this?
Similar Messages
-
This seems to be saying that I cannot implement a library services enabled repository of my own? I thought BEA's OOTB repository implementation supports library services and I know that it is based on the Content SPI.
So why not provide hooks in the Content SPI for library services?Libary services are default-enabled for the BEA repository.
See edocs:
http://e-docs.bea.com/wlp/docs92/cm/filesystemArchCM.html#wp1078317
Enabling Library Services for a BEA Repository
WebLogic Portal's library services allow you to version content and use content workflows to route content through an approval and publishing process. If you are using a BEA repository, you should enable library services before organizing your repository. Enabling library services gives you access to content workflows and versioning. Adding Content to a BEA Repository.
Note: Once you have enabled library services for a repository, they cannot be disabled.
To enable library services:
From the main menu of the Portal Administration Console, select Content > Content Management.
Select Manage | Repositories to view the Repositories tree.
Click the BEA repository for which you want to enable library services.
In the Summary tab, click Library Services to view the Library Services dialog.
Mark the Library Services Enabled check box and click Save. -
Writing Contents Of TreeSet To File
I am still a student of Java, so forgive me for the elementary question.
Is it possible to write the contents of a TreeSet to a File?
I would also like to be able to save the TreeSet in binary form instead of having it disappear when the program is closed. I think I need Serializable for this task.
The program I am trying to develop is for storing film titles. They need to be retrieved at program start-up. So far I have been able to have the titles go directly into the TreeSet from a JTextField with the click of a JButton. But obviously they are only in temporary memory and need to be saved to disk.
Thanks for any help.> Is it possible to write the contents of a TreeSet to
a File?
Sure, writing text to a file: http://javaalmanac.com/egs/java.io/WriteToFile.html
> I would also like to be able to save the TreeSet in
binary form instead of having it disappear when the
program is closed. I think I need Serializable for
this task.
Correct. Check out this link: http://javaalmanac.com/egs/java.io/SerializeObj.html
> The program I am trying to develop is for storing
film titles. They need to be retrieved at program
start-up. So far I have been able to have the titles
go directly into the TreeSet from a JTextField with
the click of a JButton. But obviously they are only
in temporary memory and need to be saved to disk.
Wouldn't you prefer a Map (key/value pair) over a Set? With a map you can store the fim title as a key and create your own Movie object which stores director, year, actors/actresses etc. as the value.
See: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Map.html
Good luck. -
Writing contents of XML-documents with SAX
I have the following problem: I use the SAX-API for parsing an XML- document and to write the contents of several tags into field variables.
For that, I use the method 'characters(char cbuf[], int start, int len' and read the interesting string part
'new String(cbuf,start,len) where cbuf is the character buffer, start the offset in the file and len the length of the string within the tag.
I registered the following problem if I load my application from a jar-file (with a 13kb long xml-file):
The offset runs till 8192 bytes and then resets to 1 and runs up again. If it reaches the offset 8192 bytes (8Kbyte) within a string as content of a tag, the string is split into two: the first till this offset and the second after it.
I have already tried to solve this problem by setting some features of the SAX-parser but I had no success.
The problem does not occur if I start my application from the Oracle-JDeveloper.
Is there anyone who has an idea? I am glad about any information or hint which might a help for me.
Thank you.From the javadocs for org.xml.sax.ContentHandler.characters(char[] ch,
int start,
int length)
The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.
To get around this.
- Initialize a StringBuffer field in startElement().
characters = new StringBuffer();- Each time characters() is called, append the section of the char[] to the StringBuffer.
characters.append(buf, offset, len);- Work with the entire resulting value in endElement().
-Scott
http://www.swiftradius.com -
UCM-VCR Adapter in WLP error while publishing content-config.xml changes
Hi,
I am getting this error when i publish my changes to server for UCM-VCR Adapter in WLP 10.3.2.
weblogic.application.ModuleException: Error reading descriptor: META-INF/content
-config.xml for app module ucmEAR
at weblogic.application.config.DefaultModule.parseDescriptorBean(Default
Module.java:483)
at weblogic.application.config.DefaultModule.prepare(DefaultModule.java:
282)
at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(Modu
leListenerInvoker.java:199)
at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(Depl
oymentCallbackFlow.java:391)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineD
river.java:83)
Truncated. see log file for complete stacktrace
Caused By: weblogic.descriptor.BeanAlreadyExistsException: Bean already exists:
"com.bea.content.config.RepositoryPropertyBeanImpl@d0b61789(/[UCMRepository]/Rep
ositoryProperties[ContentServerAdminUser])"
at weblogic.descriptor.internal.ReferenceManager.registerBean(ReferenceM
anager.java:227)
at com.bea.content.config.ContentStoreBeanImpl.setRepositoryProperties(U
nknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
Truncated. see log file for complete stacktrace
>
i also add oracle-ucm-spi-app-lib.ear in weblogic-application.xml's WebLogic Shared Library.
please find the related files.
content-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<content-config xmlns="http://www.bea.com/ns/portal/90/content-config">
<!-- This is a default content repository applications can use.
The IDE should copy this to META-INF/content-config.xml of the
application.
This repository is not required for WLP services, so you can remove
it or change it as needed. -->
<content-store>
<name>UCMRepository</name>
<class-name>com.oracle.content.spi.ucm.RepositoryImpl
</class-name>
<username>wlpApp</username>
<repository-property>
<description>Hostname on which the UCM Content Server is running
</description>
<name>ContentServerHostname</name>
<value>172.23.210.16</value>
</repository-property>
<repository-property>
<description>Port on which the UCM Content Server is running (on host named above)
</description>
<name>ContentServerPort</name>
<value>4444</value>
</repository-property>
<repository-property>
<description>Content Server uname in Admin role, for
security checks
</description>
<name>ContentServerAdminUser</name>
<value>sysadmin</value>
</repository-property>
<repository-property>
<description>List of folder ObjectClasses</description>
<name>folder_badge_objectClasses</name>
<value>IDC:Folder</value>
</repository-property>
<repository-property>
<description>Single user for all type related interactions
</description>
<name>TypeRetrievalShapeUser</name>
<value>typeShapeUser</value>
</repository-property>
<repository-property>
<name>useNativeSecurity</name>
<value>false</value>
</repository-property>
<repository-property>
<description>Protocol used to connect with the UCM Server.
Valid
options are INTRADOC or INTRADOC_SSL. INTRADOC is the
default.
</description>
<name>ContentServerServiceType</name>
<value>INTRADOC</value>
</repository-property>
<repository-property>
<description>Content Server Username in Admin role, used
for security
checks
</description>
<name>ContentServerAdminUser</name>
<value>sysadmin</value>
</repository-property>
<repository-property>
<description>Polling interval for the
CacheInvalidator IntervalJob
(must be equal to or greater than 2 min)
</description>
<name>CacheInvalidationInterval</name>
<value>2</value>
</repository-property>
<repository-property>
<description>Location on the filesystem of the
client SSL keystore
file. Only used when ContentServerServiceType
is INTRADOC_SSL
</description>
<name>ContentServerSSLKeystoreFile</name>
<value>c:/client_keystore</value>
</repository-property>
<repository-property>
<description>SSL keystore password. Only used when
ContentServerServiceType is INTRADOC_SSL
</description>
<name>ContentServerSSLKeystorePassword</name>
<value>idcidc</value>
</repository-property>
<repository-property>
<description>SSL keystore alias name. Only used when
ContentServerServiceType is INTRADOC_SSL
</description>
<name>ContentServerSSLKeystoreAlias</name>
<value>SecureClient</value>
</repository-property>
<repository-property>
<description>SSL keystore alias password. Only used when
ContentServerServiceType is INTRADOC_SSL
</description>
<name>ContentServerSSLKeystoreAliasPassword</name>
<value>idcidc</value>
</repository-property>
<read-only>true</read-only>
<binary-cache-max-entry-size>102400</binary-cache-max-entry-size>
<!-- metadata search -->
<search-is-enabled>true</search-is-enabled>
<!-- full text search -->
<fulltext-search-is-enabled>true</fulltext-search-is-enabled>
<search-indexing-is-enabled>false</search-indexing-is-enabled>
</content-store>
</content-config>
p13n-cache-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<p13n-cache-config xmlns="http://www.bea.com/ns/p13n/90/p13n-cache-config">
<!--
This is the caches for the default content repository. The IDE should
copy this to META-INF/p13n-cache-config.xml of the application. These
caches are for the default WLP Repository. You can modify these to fit
your needs. If you remove the WLP Repository, you can remove these
entries.
-->
<cache>
<name>nodeCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>60000</time-to-live>
<max-entries>50</max-entries>
</cache>
<cache>
<name>nodePathCache.UCMRepository</name>
<description>Caches node path to node instance for UCMRepository</description>
<time-to-live>60000</time-to-live>
<max-entries>50</max-entries>
</cache>
<cache>
<name>typeCache.UCMRepository</name>
<description>Caches binary property values for UCMRepository</description>
<time-to-live>300000</time-to-live>
<max-entries>200</max-entries>
</cache>
<cache>
<name>typeNameCache.UCMRepository</name>
<description>Caches type id to content type for UCMRepository</description>
<time-to-live>300000</time-to-live>
<max-entries>200</max-entries>
</cache>
<cache>
<name>binaryCache.UCMRepository</name>
<description>Caches type name to content type for UCMRepository</description>
<time-to-live>60000</time-to-live>
<max-entries>10</max-entries>
</cache>
<cache>
<name>searchCache.UCMRepository</name>
<description>Caches node id to node for UCMRepository</description>
<time-to-live>300000</time-to-live>
<max-entries>200</max-entries>
</cache>
<cache>
<name>nativeAuthCacheUCMRepository</name>
<description>Caches node path to node for UCMRepository</description>
<time-to-live>5000</time-to-live>
<max-entries>5000</max-entries>
</cache>
<cache>
<name>repo.ucm.typeNameCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>1800000</time-to-live>
<max-entries>5000</max-entries>
</cache>
<cache>
<name>repo.ucm.nodePathToUidCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>1800000</time-to-live>
<max-entries>5000</max-entries>
</cache>
<cache>
<name>repo.ucm.nodeUidCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>1800000</time-to-live>
<max-entries>5000</max-entries>
</cache>
<cache>
<name>repo.ucm.securityInfoCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>1800000</time-to-live>
<max-entries>5000</max-entries>
</cache>
<cache>
<name>repo.ucm.typeNamesCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>1800000</time-to-live>
<max-entries>5000</max-entries>
</cache>
<cache>
<name>repo.ucm.indexedFieldsCache.UCMRepository</name>
<description>Caches node id to node instance for UCMRepository</description>
<time-to-live>1800000</time-to-live>
<max-entries>5000</max-entries>
</cache>
</p13n-cache-config>Hi Venu,
Normally if you can see the UCM content in the admin console, it means the adapter is configured correctly and the placeholder should work. There's a couple of things I can suggest:
1. Did you include the oracle-ucm-spi-app-lib.ear file in your project as documented under the heading Add a Reference to the UCM VCR Adapter Shared Library in the UCM VCR adapter installation docs ( [http://download.oracle.com/docs/cd/E13155_01/wlp/docs103/ucm_adapter/install.html|http://download.oracle.com/docs/cd/E13155_01/wlp/docs103/ucm_adapter/install.html] )?
2. Browse to a document in the repository in the admin console. Pick one of the fields there (e.g. IDC:Folder.dDocId), grab the value and run a query using the placeholder. Do you get a single result?
3. The original poster (user8867138) mentions a query along the lines of returning all folders that has dDocAuthor = sysadmin. If your UCM system had 10,000 folders all created by sysadmin, the adapter might be timing out? IIRC, you can adjust the timeout in UCM.
4. Did you try a similar query using Content Selector instead?
5. If the WLP server domain is running on a separate machine, is UCM configured to accept connections from the WLP server but not your machine?
I would suggest getting the latest patches for WLP too as some of them are related to the UCM VCR adapter.
Cheers,
Cappa -
Reading WebDAV Content from ABAP
Hello,
I like to read WebDAV Content from SAP NetWeaver Portal KM with ABAP.
For writing Content with WebDAV I found this post:
A small working example of how to use the Abap webdav client to write files
With Method GET_CONTENT from CL_SWDCL_NAMESPACE_CLIENT I can read single files, but what I need is a list with files and folders for a given path.
I also tried to use the Interface IF_SWDCL_BASIC_SEARCH_CLIENT, but I only get HTML-Errorcodes 400 or 422 since I don't know which parameters I need.
Maybe there is someone here who can help me to solve this problem.
Thank you.Hello,
I face the same problem, did you already find a solution you can share?
Thanks in advance
Stefan -
When to use the new file based content repository
In Service Pack 4 there's a new implementation of the CMSPI interfaces which is configured by using the following implementation class:
com.bea.content.spi.internal.FileSystemRepositoryImpl
When should one use this new file based repository versus the existing one (configured by using the following class: com.bea.content.spi.internal.RepositoryImpl).
I've read the edocs, but it doesn't state when to use this new one compared to the previous implementation.
We consider using a third party content repository, but for the time being we will use the content repository provided by BEA.
Trond Andersen, Invenia AS, +4798290811use the new keyword when you don't have an instance of that object in memory that you want to use. For example...
if you have an object already in memory that is holding a property with a "CamelQuery" object, then you can say
var query = myobject.Query;
however, if you have to write the query, or instantiate the object from nothing, then you need to use the "new" keyword. A good example is SPSite object...
if you can get a new SPSite object by either "newing one up and passing the URL" or getting the farm and getting a site from that object.
using(SPSite site = new SPSite("url to my site"))
now I can use site.
//or
SPSite = myWebApp.Sites[0];
// this gives you site at index 0 of current webApp
most of the time in SharePOint you will be using the "new" keyword to open site collections, and then getting your subsites from there. BE CAREFUL using the "new" keyword. If you "new" up an object that is iDisposable... you
MUST dispose of that, but if you use that same object but it comes from the "current context", you mustn't dispose of it.
//dispose of this by using statement
using(SPSite site = new SPSite(<url>))
//do stuff
//after this bracket it is disposed.
//do not dispose of this:
SPSite mysite = SPContext.Current.Site;
//unpredictable behavior can occur because you will still need references to your current site. -
External BEA Content Repository
Good day,
I am attempting to create a new BEA Repository that resides in an external database and have followed the instructions as described in Creating Additional BEA Repositories at http://e-docs.bea.com/wlp/docs81/repository/repository.html
After deploying the content_repo.jar and bouncing the WebLogic Portal Server, I am not able to view or edit repository content. It is also not possible to manage content types in the new repository.
Has anyone managed to create an external repository and published content to it satisfactorily?
The errors I get are of the following types:
1.) Error Retrieving Tree Operation.
EJB Exception: : com.bea.content.RepositoryRuntimeException: Error getting the folders files. Parent Id: {0} Type: {1} at com.bea.content.repo.internal.RepoNodeOpsBean.getNodeChildren(RepoNodeOpsBean.java:1228) at com.bea.content.repo.internal.RepoNodeOpsEJBRefImpl_57333u_ELOImpl.getNodeChildren(RepoNodeOpsEJBRefImpl_57333u_ELOImpl.java:776) at com.bea.content.spi.internal.NodeOpsImpl.getNodeChildren(NodeOpsImpl.java:285) at ... (400 lines trimmed off)
or:
2.) Defined Types for Repository: RefImplRepository An exception has been thrown while trying to render this page.
Exception Message:
Error getting types.; nested exception is: javax.ejb.TransactionRolledbackLocalException: EJB Exception: ; nested exception is: com.bea.content.RepositoryRuntimeException: While trying to look up comp/env/jdbc/contentDataSource in /app/ejb/content_repo.jar#RepoObjectClassReaderEJBRefImpl.... (500 lines trimmed off)
Thanks for your time.Does it work in the admin tools when you click on the placeholder and preview it?
In the admin tools, do you have the primary property configured on your node's type? (to be the binary you want displayed)
Can you retrieve the content by hitting the ShowProperty servlet? (try a url like http://localhost:7001/<webappname>/ShowDoc/<path to your node> -
JDBC TX Settings for Weblogic Portal Content Repo Datasources
I have a scenario where I require two WLP content stores for the application. If I set the individual datasources to Support Global Transactions = True, then the application throws TX errors: ...Caused by: java.sql.SQLException: Connection has already been created in this tx context for pool named PMRestDataSource. Illegal attempt to create connection from another pool: portalDataSource.
What I did to solve this was isolate the Content Repo datasource from the portalDataSource (in fact, it is in a separate database schema from the portal framework artifacts in the Production environment), and set both of the Content-specific datasources to Support Global Transactions = False that fixed the issue.
The question I have is this: Is there any reason I need TX support for datasources that exclusively support connecting to a WLP Content Store?
Thanks in advance for your help!
Reference content-config.xml:
<content-store>
<name>PM Repository</name>
<description>Default Content Repository Configuration</description>
<class-name>com.bea.content.spi.internal.ExtendedRepositoryImpl</class-name>
<repository-property>
<description>Data source to use.</description>
<name>CM_DATA_SOURCE</name>
<value>PMRepoDataSource</value>
</repository-property>
<repository-property>
<description>Enable repository events for full-text search.</description>
<name>cm_fireRepositoryEvents</name>
<value>false</value>
</repository-property>
<read-only>false</read-only>
<binary-cache-max-entry-size>1024</binary-cache-max-entry-size>
<!-- metadata search -->
<search-is-enabled>true</search-is-enabled>
<!-- full text search -->
<fulltext-search-is-enabled>true</fulltext-search-is-enabled>
<search-indexing-is-enabled>true</search-indexing-is-enabled>
</content-store>
<content-store>
<name>REST Repository</name>
<description>REST Content Repository Configuration</description>
<class-name>com.bea.content.spi.internal.ExtendedRepositoryImpl</class-name>
<repository-property>
<description>Data source to use.</description>
<name>CM_DATA_SOURCE</name>
<value>PMRestDataSource</value>
</repository-property>
<repository-property>
<description>Enable repository events for full-text search.</description>
<name>cm_fireRepositoryEvents</name>
<value>false</value>
</repository-property>
<read-only>false</read-only>
<binary-cache-max-entry-size>1024</binary-cache-max-entry-size>
<!-- metadata search -->
<search-is-enabled>true</search-is-enabled>
<!-- full text search -->
<fulltext-search-is-enabled>false</fulltext-search-is-enabled>
<search-indexing-is-enabled>true</search-indexing-is-enabled>
</content-store>I created the table manually and run the scripts again while creating new weblogic domain and its working fine now.
What can I say is this particular *<install_home>/wlportal_10.3/portal/db/oracle/pf9_create_tables.sql.sql* is not executed as per the jdbc log which I saw. -
Content MS - Architecture/Implementation
Hi
Can someone point me to a document which explanin the underlying architecture
of the CMS. Whethr it uses Ejbs/classes/is the Data cached for the Content Operation
(add/delete). I want to write my own interface for BEA Content Management (do
not want to use BulkLoader OR myContent/Portal App tool). I am planning to develop
my own server side classes using the Content API/classes but before that wanted
to undestand the underlying arch of the CMS.
Any help would be highly appreciated
Petepete, below is an example of how to create a content node, with a binary property.
it also includes creating the content type (objectclass), which i don't believe
you will need to do. hopefully this will help.
repositoryMgr.connect();
NodeOps nops = repositoryMgr.getNodeOps();
ObjectClassOps ocops = repositoryMgr.getObjectClassOps();
ID repId = new ID();
repId.setRepositoryName(repositoryName);
PropertyDefinition[] pds = new PropertyDefinition[1];
pds[0] = new PropertyDefinition(repId, "binaryType", null, Property.BINARY,
false, false, false, false, false, null);
ObjectClass oc = new ObjectClass(repId, "schema", null, pds);
oc = ocops.createObjectClass(oc);
Node newNode = nops.createHierarchyNode(repId, "A");
Property[] props = new Property[1];
BinaryValue bv = new BinaryValue(mimeType, fileName, size, inputStream);
props[0] = new Property("binaryType", new Value(bv));
Node updatedNode = nops.addNodeContent(newNode.getId(), oc.getId(),
props);
"pete" <[email protected]> wrote:
>
James
Thanx for your reply.
I have been trying to take a look at the myContent portlet code but to
be very
honest with you it is too cluttered for me and I could not follow the
jpf code
however hard I try.
It would be extremely helpful to me if you can provide some sample code
which
just connects to a repository and then does some Add/Update function
on the CMs
tables.
Thanks, Pete
"James Owen" <[email protected]> wrote:
Pete, ok, so you want to configure your own repository (using the Portal
CM Repository),
then from a jsp, call your own classes that call the cm api, which will
store/retrieve
the content in the Portal CM Repository.
In that case, you don't need to do anything with the SPI, you'll just
be using
the CM API.
Just to clarify, when you "create" your own repository (using the Portal
CM Repository),
it doesn't really create a Repository, it just configures it, more like
a jdbc
connection. So if you delete the BEA Repository and then create your
own, using
the same Repository class (shift plus / will fill it in for you) your
newly configured
repository will point to the same tables that the BEA Repository did,
so it is
more like a rename.
For api examples, I would suggest you take a look at the sample cm portlet
code
- not for best practices ;) - but it does give good examples of howto
use the
api to create content, search, etc. if it is doesn't address your specific
questions
then let me know.
James
"pete" <[email protected]> wrote:
James, Thanks for the answers, Your Question
sorry, i'm not following what you would like to do. if you are developing
your
own ui, then all you'll just need to use the API, if you would liketo
expose
your own repository to the Virtual Repository then you will need toimplement
the SPI. what exactly is your goal?My goal is to have a UI(JSP) which in turn will call some functionsin
a Server
Side class for CRUD operation on a new Repository(with my <Application
name> Repository
instead of BEA Repository) in BEA PORTAL DB. Currently I do not have
my Virtual
repository, I just will use the BEA's virual repository and either
rename
it to
<app>Repository OR will create a new repository in the BEA Portal DB.
Do you think
If I just write some functions in a server side class for Content Oprations
using
the API that should suffice OR I will have to implement SPI
Also it would be extremely helpful if you could provide me with some
sample code
for connecting to a repository in BEA PORTAL DB and some function like
adding/updating
content in the that repository. You have been very helpful so far,thanks
a bunch
"James Owen" <[email protected]> wrote:
"pete" <[email protected]> wrote:
James
Thanks for the diagram.
1. From this it becomes clear that the Content SPI is a combinationof
Entity
and Session beans and the property set is a Facade pattern, am I
correct
in my
understanding?
this is true of the BEA Content Repository, which implements the Content
SPI.
2. If the Content Database it implemented as a Entity Bean (probably
CMP) then
is it safe to assume that it is cached?Yes, it is CMP and yes, the beans are cached with the default setting
(1000).
You can up the settings by cracking open the descriptor in content_repo.jar.
3. what is the diff between BEA content SPI and Content SPI I am
planning
to develop
the server side classes for Adding/Updating/Deleting Content in BEACMS
(developing
my own methods using content API), do you think it is safe to do
it
this
way.sorry, i'm not following what you would like to do. if you are developing
your
own ui, then all you'll just need to use the API, if you would liketo
expose
your own repository to the Virtual Repository then you will need toimplement
the SPI. what exactly is your goal?
Pete
"James Owen" <[email protected]> wrote:
Pete,
here is a diagram showing the architecture. are you planning on
implementing
the
SPI? if so, i submitted a doc on dev2dev that describes the SPI.it
hasn't
been
posted yet, so i can send it to you separately.
James
"pete" <[email protected]> wrote:
Hi
Can someone point me to a document which explanin the underlying
architecture
of the CMS. Whethr it uses Ejbs/classes/is the Data cached for
the
Content
Operation
(add/delete). I want to write my own interface for BEA Content
Management
(do
not want to use BulkLoader OR myContent/Portal App tool). I amplanning
to develop
my own server side classes using the Content API/classes but beforethat
wanted
to undestand the underlying arch of the CMS.
Any help would be highly appreciated
Pete -
FullTextSearch giving an exception com.bea.content.RepositoryException:
Hi all,
I'm trying to search a repository with libraries enabled using Full text search.
the code is
queryExpression= this.mQuery.buildContains(IMetadataQuery.SystemProperty.cm_objectClass,new String[]{"Article"});
IFullTextSearch expression = FullTextSearchFactory.buildFullTextSearch(queryExpression, null, true);
Search search = new Search(path, 10000, sort, expression,true);
ISortableFilterablePagedList<Node> results = searchManager.search(context, search);
and when the search is perfomed with searchManager.search it throws me the following Exception:
com.bea.content.RepositoryException: The Type is not specified in the query, so sorting on user-defined properties cannot be performed.
at com.bea.content.repo.internal.server.logic.search.AutonomyExpression.setSortParameters(AutonomyExpression.java:451)
at com.bea.content.repo.internal.server.logic.search.AutonomyClient46.executeQuery(AutonomyClient46.java:88)
at com.bea.content.repo.internal.server.logic.SearchOpsLogic.fullTextSearch(SearchOpsLogic.java:195)
at com.bea.content.repo.internal.server.logic.SearchOpsLogic.search(SearchOpsLogic.java:146)
at com.bea.content.repo.internal.server.bean.SearchOpsBean.search(SearchOpsBean.java:76)
at com.bea.content.repo.internal.server.bean.RepoSearchOps_xxpfs2_ELOImpl.search(RepoSearchOps_xxpfs2_ELOImpl.java:220)
at com.bea.content.spi.internal.SearchOpsImpl.search(SearchOpsImpl.java:89)
at sun.reflect.GeneratedMethodAccessor677.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at com.bea.content.manager.internal.delegate.LatestInterfaceVersionWrapper.invoke(LatestInterfaceVersionWrapper.java:57)
at $Proxy64.search(Unknown Source)
at com.bea.content.manager.internal.delegate.LatestSearchOpsDelegate.search(LatestSearchOpsDelegate.java:47)
at com.bea.content.manager.internal.SearchOpsImpl.searchRepository(SearchOpsImpl.java:231)
at com.bea.content.manager.internal.SearchOpsImpl.search(SearchOpsImpl.java:167)
at com.bea.content.federated.internal.itemloader.NodeSearchItemLoader.fetchItemIdentifiers(NodeSearchItemLoader.java:74)
at com.bea.content.paging.internal.OnDemandQueryProcessorImpl.initializeItemIdsIfNeeded(OnDemandQueryProcessorImpl.java:90)
at com.bea.content.paging.internal.OnDemandQueryProcessorImpl.fetchItems(OnDemandQueryProcessorImpl.java:330)
at com.bea.content.paging.internal.DirectAccessQueryProcessor.fetchItems(DirectAccessQueryProcessor.java:111)
at com.bea.content.paging.internal.ItemLoadingAdapter.fetchItemsImpl(ItemLoadingAdapter.java:237)
at com.bea.content.paging.internal.ItemLoadingAdapter.fetchItems(ItemLoadingAdapter.java:126)
at com.bea.content.paging.internal.ItemLoadingAdapter.initialize(ItemLoadingAdapter.java:97)
at com.bea.content.paging.internal.PagedListImpl.<init>(PagedListImpl.java:100)
at com.bea.content.federated.internal.SearchManagerImpl.search(SearchManagerImpl.java:60)
Any ideas????
Any help is very appreciated.
Regards, ArmandoSearch search = new Search(path, 10000, sort, expression,true);
What is sort in this? this could either be string or SortCriteria object, or null. I think your query is failing here.
Hope it helps -
Hi when i am doing search operation from controller in weblogic portal 10.2 i am getting the following error.
[line=1,col=6] line 1:6: unexpected token: null
at com.bea.content.expression.ExpressionHelper.convertException(ExpressionHelper.java:1796)
at com.bea.content.expression.ExpressionHelper.parse(ExpressionHelper.java:306)
at com.bea.content.expression.Search.<init>(Search.java:399)
at com.collabera.wiki.SearchResults.SearchResultsController.searchResults(SearchResultsController.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.beehive.netui.pageflow.FlowController.invokeActionMethod(FlowController.java:879)
at org.apache.beehive.netui.pageflow.FlowController.getActionMethodForward(FlowController.java:809)
at org.apache.beehive.netui.pageflow.FlowController.internalExecute(FlowController.java:478)
at org.apache.beehive.netui.pageflow.PageFlowController.internalExecute(PageFlowController.java:306)
at org.apache.beehive.netui.pageflow.FlowController.execute(FlowController.java:336)
at org.apache.beehive.netui.pageflow.internal.FlowControllerAction.execute(FlowControllerAction.java:52)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.access$201(PageFlowRequestProcessor.java:97)
at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor$ActionRunner.execute(PageFlowRequestProcessor.java:2044)
at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors$WrapActionInterceptorChain.continueChain(ActionInterceptors.java:64)
at org.apache.beehive.netui.pageflow.interceptor.action.ActionInterceptor.wrapAction(ActionInterceptor.java:184)
at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors$WrapActionInterceptorChain.invoke(ActionInterceptors.java:50)
at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors$WrapActionInterceptorChain.continueChain(ActionInterceptors.java:58)
at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors.wrapAction(ActionInterceptors.java:87)
at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processActionPerform(PageFlowRequestProcessor.java:2116)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:556)
at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:853)
at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:631)
at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:158)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at org.apache.beehive.netui.pageflow.PageFlowUtils.strutsLookup(PageFlowUtils.java:1199)
at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.executeAction(ScopedContentCommonSupport.java:686)
at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.processActionInternal(ScopedContentCommonSupport.java:142)
at com.bea.portlet.adapter.scopedcontent.PageFlowStubImpl.processAction(PageFlowStubImpl.java:106)
at com.bea.portlet.adapter.NetuiActionHandler.raiseScopedAction(NetuiActionHandler.java:111)
at com.bea.netuix.servlets.controls.content.NetuiContent.raiseScopedAction(NetuiContent.java:181)
at com.bea.netuix.servlets.controls.portlet.events.FirePageFlowActionDecorator.handleEvent(FirePageFlowActionDecorator.java:101)
at com.bea.netuix.events.manager.EventManager.doFireEvents(EventManager.java:282)
at com.bea.netuix.events.manager.EventManager.fireEvents(EventManager.java:217)
at com.bea.netuix.nf.ControlLifecycle$4.postVisitRoot(ControlLifecycle.java:324)
at com.bea.netuix.nf.ControlTreeWalker.walkRecursive(ControlTreeWalker.java:341)
I am using following code in my controller (i.e SearchResultController.jpf)
I have hardcoded string value (i.e SearchString)
Search search = new Search("SearchString");
search.setUseCache(false);
// Do the search using the ISearchManager.
ISearchManager searchManager = ContentManagerFactory.getSearchManager();
ContentContext ctx= new ContentContext(getRequest());
ctx.setParameter( ICMPagedResult.PAGE_SIZE_KEY, new Integer(5) ); // use pages of size 5
// find the search results
ISortableFilterablePagedList<Node> resultList = searchManager.search(ctx, search);
CMPagedResultFactory<Node> pagedResultFactory= new CMPagedResultFactory<Node>();
ICMPagedResult<Node> pagedResults= pagedResultFactory.createPagedResult( ctx, resultList );
Kindly tell me what is wrong.
Also How will i use Expression in case of StringHi greg
thanks for the reply.
i got something about Search class. But i am again back to zero as i am not getting any search results.
Following is the code i am using in controller class
String keywordVal= "searchString";
IMetadataQuery mQuery = FullTextQueryFactory.getMetadataQuery();
ITextQuery tQuery = FullTextQueryFactory.getTextQuery();
IFullTextSearch fts = FullTextSearchFactory.buildFullTextSearch(
null, /*mQuery.buildContains("*", new String[]{keywordVal}) Metadata query parameter, match any field with the given string */
tQuery.buildEquals(keywordVal), /* Text query parameter, match binary content with the given string */
true /* isOr */);
//create the search path
String repositoryPath = PathHelper.SEPARATOR + "BEA Repository";
//create the search object
Search search = new Search(repositoryPath, -1, null, fts, true );
// Do not use the global search cache.
search.setUseCache(false);
// Do the search using the ISearchManager.
ISearchManager searchManager = ContentManagerFactory.getSearchManager();
ContentContext ctx= new ContentContext(getRequest());
ctx.setParameter( ICMPagedResult.PAGE_SIZE_KEY, new Integer(5) ); // use pages of size 5
// find the search results
ISortableFilterablePagedList<Node> resultList = searchManager.search(ctx, search);
CMPagedResultFactory<Node> pagedResultFactory= new CMPagedResultFactory<Node>();
ICMPagedResult<Node> pagedResults= pagedResultFactory.createPagedResult( ctx, resultList );
iterator = resultList.iterator();
// We will forward the payload along. This is currently used by the displayResults portlet.
// The displayResults portlet listens for the pageflow action "findResults". In response it fires
// its own pageflow action which will display the results.
return new Forward("success");
and i have also changed something in content-config.xml which looks something like this: -
<?xml version="1.0" encoding="UTF-8"?>
<content-config xmlns="http://www.bea.com/ns/portal/90/content-config">
<!-- This is a default content repository applications can use.
The IDE should copy this to META-INF/content-config.xml of the
application.
This repository is not required for WLP services, so you can remove
it or change it as needed. -->
<content-store>
<name>BEA Repository</name>
<description>Default Content Repository Configuration</description>
<class-name>com.bea.content.spi.internal.ExtendedRepositoryImpl</class-name>
<repository-property>
<description>Data source to use.</description>
<name>CM_DATA_SOURCE</name>
<value>contentDataSource</value>
</repository-property>
<!--<repository-property>
<description></description>
Run additional checks against search criteria searchValidation
<name>cm_fireRepositoryEvents</name>
<value>true</value>
</repository-property>
-->
<repository-property>
<description>Enable repository events for full-text search.</description>
<name>cm_fireRepositoryEvents</name>
<value>true</value>
</repository-property>
<repository-property>
<description>Library Services Enabled</description>
<name>MANAGEMENT_ENABLED</name>
<value>true</value>
</repository-property>
<read-only>false</read-only>
<binary-cache-max-entry-size>1024</binary-cache-max-entry-size>
<!-- metadata search -->
<search-is-enabled>true</search-is-enabled>
<!-- full text search -->
<fulltext-search-is-enabled>true</fulltext-search-is-enabled>
<search-indexing-is-enabled>true</search-indexing-is-enabled>
</content-store>
</content-config>
Kindly tell me if i have to change anything somewhere else.
because from this code i am not getting any results
thanks
Ankur -
Interwoven TeamSite content repository...
Hi,
we are going to use the portal with Interwoven TeamSite as content
management system. Looking through this news group and the developer
forums at Interwoven it seems there are more ways to do this.
I think the best way would be to go through a SPI. We would only
require a SPI for reading since content editing will be done using
TeamSite (of course). But my searching have failed to find any SPI
implementation for Interwoven TeamSite. Although all docs says that
portal supports Interwoven TeamSite it seems that there is no
description of excatly how this is done.
Anyone used a SPI implementation to access TeamSite?
Best regards,
ThorWe're struggling with this now. The statement that Interwoven posts content to
BEA's repository is a bit misleading because it doesn't happen automatically through
Interwoven's Open Deploy. To do this, it appears that you either have to use
Interwoven's Data Deploy utility (after mapping the repository schema), or manipulate
the content into the schema that BEA's Bulk Loader understands and use BL to import.
If anybody has done either, please speak up.
And the portlets are just a different user interface. They do not provide access
to the repository.
"alex toussaint" <[email protected]> wrote:
>
>
Hi,
Interwoven post the content to the BEA Repository. They also have a set
of portlets
to work with the content. They did not implement the CM SPI.
Regards,
--alex
[email protected] (Thor A. Lange) wrote:
"Karthi" == newsgroups bea com <[email protected]> writes:
Karthi> I suppose the Thrid party CMS must provide the
Karthi> Implementation of BEA Content SPI Interwooven, so that BEA
Karthi> portals can use the CMS of Interwooven
Yep, that was my thought too. So I started out searching the
Interwoven site - but all I seem able to find is some portlets for
portal for editing content (or rather link to the TeamSite server).
It doesn't seem like Interwoven has created any SPI implementation -
that why I was interested in hearing if others had been using an SPI
implementation with Interwoven TeamSite.
Best regards,
Thor -
1.How to display User Name in Master Page
2. Writing Content Editor html, not working..like <a href="...url1..><input type="button" value="Accept"></a>
<a href="...url2..><input type="button" value="Decline"></a>
Both are taking same page url, where content editor is added.
RavindranathUse delegate control in master page and display current user name. Refer to the following posts for more information.
http://zimmergren.net/technical/sp-2013-some-new-delegatecontrol-additions-to-the-sharepoint-2013-master-pages
http://mihirsharepoint.wordpress.com/2012/11/15/create-delegate-control-in-sharepoint/
Cheers, -
Im working with a group of developers who are writing content for some 4400's. Every once in a while they make something that just doesnt play well or look right. Are there any guidelines available for creating content for these devices?
Thanks!
bobhttp://www.cisco.com/en/US/docs/video/digital_media_systems/5_x/5_2/dmd/best/practices/guidelines.html#wp1052959
regards
Maybe you are looking for
-
How can I access a response file on the same computer but with different login?
When trying to access a response file on the same computer that was used to set it up, but with a different login, I get an error message that the network resource was not found. How can I retrieve the responses on the same computer but under a diffe
-
How do you show multiple copies of a layout...?
I have a Bill of Lading template but now the end-users want 3 copies of it, each copy labeled different (Shipper, Customer, Company) I have something that works, but the page numbering is not correct and if there are enough lines to spill to a second
-
I have read a few posts on this issue, but I have yet to find a resolution. I cannot get Itunes to install on my computer. I get this Error each time I try: Could not open key: HKEYLOCALMACHINE\Software\Classes\QuicktimePlayerLib.QuicktimePlayerApp\C
-
Hi, we have a guide called 'How to configure the universal worklist' but it's for ep6.0. Does anyone have a link to the document for ep7.0 ? thanks, Malcolm.
-
Integration Server configuration error
Hi all, I have an issue with the XI Integration server configuration. When I have tested the configuration I have detected that there is an error in the Integration server (transaction SXMB_ADM) The value was: http://xxx:xxxx:/sap_xi/engine?type=entr